// 媒体资源 URL 构造与转换工具
// 统一规则：
// 1. 后端只存相对路径（/media/...）
// 2. 小程序展示时拼接 origin（协议 + 域名 + 端口），绝不拼接 /api/miniprogram 前缀
// 3. 已是 http/https 绝对地址的保持不变
// 4. 其它以 / 开头或普通相对路径一律按 origin + path 处理（容错）

function _getOrigin(apiBaseUrl) {
  if (!apiBaseUrl) return '';
  const m = apiBaseUrl.match(/^(https?:\/\/[^/]+)/i);
  if (m) return m[1];
  // 去掉 /api/ 之后的部分以及末尾斜杠
  return apiBaseUrl.replace(/\/api.*/, '').replace(/\/$/, '');
}

function buildMediaUrl(u, apiBaseUrl) {
  if (!u) return '';
  if (typeof u !== 'string') return '';
  let val = u.trim();
  if (!val) return '';
  if (/^https?:\/\//i.test(val)) return val; // 已是完整 URL
  // 清理潜在的冗余前缀 /api/miniprogram/
  val = val.replace(/^\/api\/miniprogram\/+/, '/');
  if (!val.startsWith('/')) val = '/' + val;
  const origin = _getOrigin(apiBaseUrl || (getApp && getApp().globalData.apiBaseUrl));
  return origin + val;
}

function mapMediaUrls(arr, apiBaseUrl) {
  if (!Array.isArray(arr)) return [];
  return arr.map(u => buildMediaUrl(u, apiBaseUrl)).filter(Boolean);
}

module.exports = {
  buildMediaUrl,
  mapMediaUrls
};
